package Thread.Runnable;

/*
    创建多线程程序的第二种方法：
        java.lang.Runnable
            Runnable接口应由打算通过某一线程执行其实例的类来实现，类必须定义一个无参数的run方法
        java.lang.Thread类的构造方法
            Thread(Runnable target)                 分配新的Thread对象
            Thread(Runnable target,String name)     分配新的Thread对象

    现实步骤：
        1、创建一个Runnable接口的实现类
        2、在实现类中重写run方法，设置线程任务
        3、创建一个Runnable接口的实现类对象
        4、创建Thread类对象，构造方法中传递Runnable接口的实现类对象
        5、调用Thread类中的start方法，开启新的线程执行run方法

    实现Runnable的好处：
        1、避免了单继承的局限性
            一个类只能继承一个类，类继承了Thread类就不能继承其他类
            实现Runnable接口，还可以继承其他的类
        2、增强了程序的扩展性，降低了程序的耦合性（解耦）
            实现Runnable接口的方式，把设置线程任务和开启新线程进行了分离
            实现类中重写了run方法：用来设置线程任务
            创建Thread类对象，调用start方法，开启新的线程
*/
public class Runnable01 {
    public static void main(String[] args) {
        //3、创建一个Runnable接口的实现类对象
        RunnableImpl runnable = new RunnableImpl();
        //4、创建Thread类对象，构造方法中传递Runnable接口的实现类对象
        Thread mythread = new Thread(runnable);

        //使用匿名对象，
        Thread mythread1 = new Thread(new RunnableImpl2());

        // 5、调用Thread类中的start方法，开启新的线程执行run方法
        mythread.start();
        mythread1.start();
        for (int i = 0; i < 20; i++) {
            System.out.println(Thread.currentThread().getName() + "--->" + i);
        }
    }
}
